package com.gph.saviorframework.wf.service;

import org.activiti.bpmn.model.BpmnModel;
import org.activiti.bpmn.model.FlowElement;
import org.activiti.engine.repository.Model;

import java.io.UnsupportedEncodingException;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 流程模型接口
 * @author guopeihui
 */
public interface ActivitiModelService {

    /**
     * 创建流程模型
     * @param name 模型名称
     * @param key 模型key
     * @param description 模型描述
     * @return
     * @throws UnsupportedEncodingException
     */
    Model createModel(String name,String key,String description) throws UnsupportedEncodingException;

    /**
     * 复制流程模型
     * @param sourceModelId
     * @param newModelName
     * @param newKey
     * @param newModelDescription
     * @return
     * @throws UnsupportedEncodingException
     */
    Model copyModel(String sourceModelId,String newModelName,String newKey,String newModelDescription) throws UnsupportedEncodingException;

    /**
     * 查询model的map结果，给jqgrid专用的接口
     * @param start
     * @param limit
     * @param dir
     * @return
     */
    Map<String,Object> findModelsMap(Integer start,Integer limit,String dir);

    /**
     * 查找所有的模型数量
     * @return
     */
    long countAllModel();

    /**
     * 查询所有model
     * @return
     */
    List<Model> findModels();

    /**
     * 分页查询model
     * @param start
     * @param limit
     * @return
     */
    List<Model> findModels(Integer start,Integer limit);

    /**
     * 分页查询model。并排序
     * @param start
     * @param limit
     * @param dir
     * @return
     */
    List<Model> findModels(Integer start,Integer limit,String dir);

    /**
     * 根据模型编号删除模型
     * @param modelId
     */
    void deleteModelById(String modelId);

    /**
     * 部署模型
     * @param modelId
     */
    boolean deployModelById(String modelId);
}
